package hbt.dao;

import hbt.HibernateUtil;

import java.util.List;

import negocio.OrdenCompra;
import negocio.OrdenPedido;

import org.hibernate.Query;
import org.hibernate.Session;

import Enum.EEstadoOP;

public class OrdenPedidoDAO extends HibernateDao<OrdenPedido> {
	protected static HibernateDao instancia = null;

	public static OrdenPedidoDAO getInstancia() {
		if (instancia == null) {
			instancia = new OrdenPedidoDAO();
			sf = HibernateUtil.getSessionFactory();
		}
		return (OrdenPedidoDAO) instancia;
	}

	public List<OrdenPedido> findOrdenesDePedidoPendientes() {
		Session session = sf.openSession();
		String hql = "from " + OrdenPedido.class.getName() + " o ";
		hql += " where o.estado = :estado";

		Query query = session.createQuery(hql);

		query.setParameter("estado", EEstadoOP.pendiente);
		List<OrdenPedido> ordenesDePedido = query.list();
		session.close();
		return ordenesDePedido;
	}

	public void actualizarOPYRegistrarOC(List<OrdenCompra> ordenesCompra, List<OrdenPedido> ordenesPedidoPendientes) throws Exception{
		try{
			
			//HibernateUtil.clear();
			Session session = sf.openSession();
			session.beginTransaction(); 
			//Session s = beginTransaction();
			//s.clear();
			for(OrdenPedido op : ordenesPedidoPendientes){
				op.setEstado(EEstadoOP.procesado);
				session.update(op);
			}
			
			for(OrdenCompra oc : ordenesCompra){
				session.persist(oc);
			}
			session.getTransaction().commit();
			session.close();
			//commitTransaction(s);
		}catch(Exception e){
			rollbackTransaction(e);
			throw e;
		}
	}
}
